package com.pengliu.config;

import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.github.pagehelper.PageHelper;

@Configuration
@EnableTransactionManagement
public class MyBatisConfig {

	/**
	 * 分页插件
	 * @return
	 */
	@Bean  
    public PageHelper pageHelper() {  
       PageHelper pageHelper = new PageHelper();  
       Properties properties = new Properties();
       /**
        * 4.0.0以后版本可以不设置该参数
        * 增加dialect属性，使用时可以指定该属性（不指定的情况下，分页插件会自动判断），可选值为oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix。
        */
       properties.setProperty("dialect", "mysql");
       /**
        * 该参数默认为false
        * 设置为true时，会将RowBounds第一个参数offset当成pageNum页码使用
        * 和startPage中的pageNum效果一样
        * 增加offsetAsPageNum属性，默认值为false，使用默认值时不需要增加该配置，需要设为true时，需要配置该参数。当该参数设置为true时，使用RowBounds分页时，会将offset参数当成pageNum使用，可以用页码和页面大小两个参数进行分页。
        */
       properties.setProperty("offsetAsPageNum", "true");
       /**
        * 该参数默认为false
        * 设置为true时，使用RowBounds分页会进行count查询
        * 增加rowBoundsWithCount属性，默认值为false，使用默认值时不需要增加该配置，需要设为true时，需要配置该参数。当该参数设置为true时，使用RowBounds分页会进行count查询。
        */
       properties.setProperty("rowBoundsWithCount", "true");
       /**
        * 设置为true时，如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果
        * （相当于没有执行分页查询，但是返回结果仍然是Page类型）
        * 增加pageSizeZero属性，默认值为false，使用默认值时不需要增加该配置，需要设为true时，需要配置该参数。当该参数设置为true时，如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果（相当于没有执行分页查询，但是返回结果仍然是Page类型）。
        */
       properties.setProperty("pageSizeZero", "true");
       /**
        * 3.3.0版本可用 - 分页参数合理化，默认false禁用
        * 启用合理化时，如果pageNum<1会查询第一页，如果pageNum>pages会查询最后一页
        * 禁用合理化时，如果pageNum<1或pageNum>pages会返回空数据
        * 增加reasonable属性，默认值为false，使用默认值时不需要增加该配置，需要设为true时，需要配置该参数。具体作用请看上面配置文件中的注释内容。
        */
       properties.setProperty("reasonable", "true");
       pageHelper.setProperties(properties);
       return pageHelper;
    }
}
